Tarea 3 Orquídeas en Áreas de conservación

Integrantes: Kevin Torres C27824 Jeremy Angulo Seas C20498

Introducción:

Se elaborará un mapeo de la cantidad de orquideas que existen en diferentes lugares de Costa Rica y representandolo con graficos para una mayor comprensión. Tomando el conjunto de datos de Áreas de conservacion en Costa Rica y el registro de Orquideas

Carga de Paquetes

Code
library(devtools)
library(tidyverse)
library(DT)
library(sf)
library(rgdal)
library(raster)
library(terra)
library(leaflet)
library(leaflet.extras)
library(leafem)
library(viridis)
library(viridisLite)
library(ggplot2)
library(plotly)
library(leaflet.providers)
library(htmltools)
library(readr)
library(hrbrthemes)
library(ggthemes)

Conjuntos de Datos

Code
area <-
  st_read("areas_conservacion_simp_10m.geojson", quiet = TRUE) |>
st_transform(4326)

Carga de datos de Orquideas de Costa Rica

Code
orquideas <-
  st_read(
    "orquideas.csv",
    options = c(
      "X_POSSIBLE_NAMES=decimalLongitude", # columna de longitud decimal
      "Y_POSSIBLE_NAMES=decimalLatitude"   # columna de latitud decimal
    ),
    quiet = TRUE
  )

# Asignación del CRS WGS84
st_crs(orquideas) <- 4326

Unión espacial orquideas y areas

Code
orquideas_union_area <-
  st_join(
    x = orquideas,
    y = dplyr::select(area, nombre_ac),
    join = st_within
  )

Conteo de la cantidad de especies de orquideas por área

Code
riqueza_especies_orquideas_areas <- 
  orquideas_union_area |>
  st_drop_geometry() |>
  group_by(nombre_ac) |>
  summarize(riqueza_especies_orquideas = n_distinct(species, na.rm = TRUE))

Unión no espacial de las áreas con el dataframe de riqueza de especies en áreas de conservación

Code
areas_union_riqueza <-
  left_join(
    x = area,
    y = dplyr::select(riqueza_especies_orquideas_areas, nombre_ac, riqueza_especies_orquideas),
    by = "nombre_ac"
  ) |>
  replace_na(list(riqueza_especies_orquideas = 0))

Generación de del Mapa de coropletas

Code
colores_riqueza_especies <-
  colorNumeric(
    palette = "Reds",
    domain = areas_union_riqueza$riqueza_especies_orquideas,
    na.color = "transparent"
  )

# Paleta de colores de especies
colores_especies <- colorFactor(
  palette = viridis(length(unique(orquideas$species))), 
  domain = orquideas$species
)

# Mapa leaflet
leaflet() |>
  setView(
    lng = -84.19452,
    lat = 9.572735,
    zoom = 7) |>
  addTiles(group = "Mapa general (OpenStreetMap)") |>
  addProviderTiles(
    providers$Esri.WorldImagery, 
    group = "Imágenes satelitales (ESRI World Imagery)"
  ) |> 
  addPolygons(
    data = areas_union_riqueza,
    fillColor = ~ colores_riqueza_especies(areas_union_riqueza$riqueza_especies_orquideas),
    fillOpacity = 0.8,
    color = "black",
    stroke = TRUE,
    weight = 1.0,
    popup = paste(
      paste("<strong>Área de conservación:</strong>", areas_union_riqueza$nombre_ac),
      paste("<strong>Riqueza de orquídeas:</strong>", areas_union_riqueza$riqueza_especies_orquideas),
      sep = '<br/>'
    ),
    group = "Riqueza de orquídeas"
  ) |>
  addScaleBar(
    position = "bottomleft", 
    options = scaleBarOptions(imperial = FALSE)
  ) |>    
  addLegend(
    position = "bottomleft",
    pal = colores_riqueza_especies,
    values = areas_union_riqueza$riqueza_especies_orquideas,
    group = "Riqueza de especies",
    title = "Riqueza de especies"
  ) |>
  addCircleMarkers(
    data = orquideas,
    stroke = F,
    radius = 4,
    fillColor = ~colores_especies(orquideas$species),
    fillOpacity = 1.0,
    popup = paste(
      paste0("<strong>Especie: </strong>", orquideas$species),
      paste0("<strong>Localidad: </strong>", orquideas$locality),
      paste0("<strong>Fecha: </strong>", orquideas$eventDate),
      paste0("<strong>Fuente: </strong>", orquideas$institutionCode),
      paste0("<a href='", orquideas$occurrenceID, "'>Más información</a>"),
      sep = '<br/>'
    ),    
    group = "Registros de presencia"
  ) |>  
  addLayersControl(
    baseGroups = c(
      "Mapa general (OpenStreetMap)", 
      "Imágenes satelitales (ESRI World Imagery)"
    ),
    overlayGroups = c(
      "Riqueza de especies",
      "Registros de presencia"
    )
  ) |>
  addResetMapButton() |>
  addSearchOSM() |>
  addMouseCoordinates() |>
  addFullscreenControl() |>
  hideGroup("Registros de presencia") 

Tabla de riqueza de especies de orquídeas en áreas de conservación

Code
# Conteo de la cantidad de especies de orquideas

riqueza_especies_orquideas <- orquideas_union_area |>
  st_drop_geometry() |>
  group_by(nombre_ac) |>
  summarize(riqueza_especies_orquideas = n_distinct(species, na.rm = TRUE))

riqueza_especies_orquideas |>
  arrange(desc(riqueza_especies_orquideas)) |>
  datatable(
    colnames = c("areas", "Riqueza de especies de orquídeas"),
    options = list(
      pageLength = 5,
      language = list(url = '//cdn.datatables.net/plug-ins/1.10.11/i18n/Spanish.json')
    )
  )

Gráfico de barras de riqueza de especies de orquídeas en áreas de conservación

Code
grafico_barras_ggplot2 <-
  riqueza_especies_orquideas_areas |>
  ggplot(aes(x = reorder(nombre_ac,-riqueza_especies_orquideas), y = riqueza_especies_orquideas)) +
  geom_col(
    aes(
      text = paste0(
        "Riqueza orquídeas en áreas de conservación: ", round(after_stat(y), 2)
      )
    )
     
  ) +
  ggtitle("Riqueza de especies por áreas") +
  xlab("Áreas de conservación") +
  ylab("Riqueza de especies") +
  labs(caption = "Fuente: Sinac") +
  theme_dark() +
  theme(axis.text.x = element_text(angle = 90, hjust = 1))

# Gráfico de barras plotly
ggplotly(grafico_barras_ggplot2, tooltip = "text") |>
  config(locale = 'es')

Gráfico de barras de cantidad de registros de presencia por especie, para las 10 especies de orquídeas con más registro

Code
orquideas_reducidas <- orquideas_union_area  |> 
  count(species, sort = TRUE) |> 
  top_n(10, n)

grafico_barras_ggplot2 <- orquideas_reducidas |>
  ggplot(aes(x = reorder(species, -n), y = n)) +
  geom_bar(stat = "identity", fill = "#666666",
           aes(text = paste0("Cantidad de registros de presencia de especies: ", n))) +
  ggtitle("Las 10 orquideas más abundantes en el área costarricense según su región") +
  xlab("Especie") +
  ylab("Orquideas registradas") +
  labs(caption = "Fuente: Sinac") +
  theme_dark() +
  theme(axis.text.x = element_text(angle = 90, hjust = 1))

# Gráfico de barras plotly
ggplotly(grafico_barras_ggplot2, tooltip = "text") |> 
  config(locale = 'es')